home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / qbprog.EXE / MODENE.BAS < prev    next >
BASIC Source File  |  1980-01-10  |  6KB  |  188 lines

  1. '===========================================================================
  2. 'QBASIC'de de çalìƒìr
  3. '     bu dilde bellek sorunu nedeniyle yavaƒ bir hìz seçiniz.
  4.  
  5. 'QuickBasic de çalìƒmasì için ise  versiyon 7.1 QBX /L QBX /C:32000
  6. '                                  versiyon 4.5 QB /L QB /C:32000
  7. '                                       ƒeklinde yüklenmelidir.
  8.  
  9. 'Her türlü modemde çalìƒan iletiƒim programì Çekirdek mödülü
  10. '===========================================================================
  11. DECLARE SUB EkranAc (Tip!)
  12. DECLARE SUB Terminal ()
  13. DECLARE SUB ModemiKapa (ModemAdresi!)
  14. DECLARE SUB ModemiAc (ModemAdresi!, Hiz!, IrqNo!)
  15. DIM SHARED Sakla(27)
  16. '===========================================================================
  17. 'Deºiƒkenler
  18. 'Kendi modem bilgilerinizi giriniz
  19.  Irq = 5: Port = &H3E8: Baud = 57600: Ansi = 1
  20.  
  21. 'Seçenekler
  22. 'Irq = 2: Port = &H2E8: Baud = 2400 : Ansi = 1
  23. 'Irq = 3: Port = &H2F8: Baud = 4800 : Ansi = 0
  24. 'Irq = 4: Port = &H3E8: Baud = 9600
  25. 'Irq = 5: Port = &H3F8: Baud = 14400
  26. 'Irq = 7              : Baud = 19200
  27. '                       Baud = 38400
  28. '                       Baud = 57600
  29. '                       Baud = 115200
  30. '===========================================================================
  31. 'Program baƒlangìcì
  32. CALL ModemiAc(Port, Baud, Irq)
  33. EkranAc (Ansi)
  34. Terminal
  35. ModemiKapa (Port)
  36. END
  37. '===========================================================================
  38. 'IRQ hattìnìn açìlmasì için makine dili yordamì
  39. IRQSerbest:
  40. DATA &H50                  : 'PUSH AX
  41. DATA &H53                  : 'PUSH BX
  42. DATA &H51                  : 'PUSH CX
  43. DATA &HFA                  : 'CLI
  44. DATA &H31, &HC9            : 'XOR CX,CX
  45. DATA &HB1, 2               : 'MOV CL,02
  46. DATA &HBB, 1, 0            : 'MOV BX,0001
  47. DATA &HD3, &HE3            : 'SHL BX,CL
  48. DATA &HF7, &HD3            : 'NOT BX
  49. DATA &HE4, &HA1            : 'IN AL,A1
  50. DATA &H20, &HF8            : 'AND AL,BH
  51. DATA &HE6, &HA1            : 'OUT A1,AL
  52. DATA &HE4, &H21            : 'IN AL,21
  53. DATA &H20, &HD8            : 'AND AL,BL
  54. DATA &HE6, &H21            : 'OUT 21,AL
  55. DATA &HFB                  : 'STI
  56. DATA &H59                  : 'POP CX
  57. DATA &H5B                  : 'POP BX
  58. DATA &H58                  : 'POP AX
  59. DATA &HCB                  : 'RETF
  60.  
  61. 'Ekran Ansi veya TTY modda açìlìyor
  62. SUB EkranAc (Tip)
  63.   IF Tip = 1 THEN
  64.     OPEN "CON" FOR OUTPUT AS #2    'Ansi
  65.   ELSE
  66.    OPEN "SCRN:" FOR OUTPUT AS #2   'TTY
  67.   END IF
  68. END SUB
  69.  
  70. SUB ModemiAc (ModemAdresi, Hiz, IrqNo)
  71.  
  72. '===========================================================================
  73. 'Bazì deºerler saklanìyor
  74.   DEF SEG = 0
  75.   FOR I = 40 TO 63              'ÿnterrupt adresleri
  76.     Sakla(I - 40) = PEEK(I)
  77.   NEXT
  78.   Sakla(24) = INP(&H21)          '8259 (PIC) deºerleri
  79.   Sakla(25) = INP(&HA1)
  80.   Sakla(26) = PEEK(1026)         'Com2 eski aygìt adresi
  81.   Sakla(27) = PEEK(1027)
  82.  
  83. '===========================================================================
  84. 'Com2'ye bizim modem atanìyor
  85.   POKE 1027, ModemAdresi \ 256
  86.   POKE 1026, ModemAdresi AND 255
  87.  
  88. '===========================================================================
  89. 'Yeni aygìt (bizim modem) açìlìyor
  90.   OPEN "Com2:2400,N,8,1" FOR RANDOM AS #1
  91.  
  92. '===========================================================================
  93. 'Modem seçilen hìz için ayarlanìyor
  94.   Sakla = INP(ModemAdresi + 3)
  95.   OUT ModemAdresi + 3, 128
  96.   OUT ModemAdresi, 115200 / Hiz
  97.   OUT ModemAdresi + 3, Sakla
  98.  
  99. '===========================================================================
  100. 'Com2'ye ait IRQ3 kapatìlìyor, PIC deºerleri iade ediliyor
  101.   OUT &H21, Sakla(24)
  102.   OUT &HA1, Sakla(25)
  103.  
  104. '===========================================================================
  105. 'Bizim modeme ait IRQ'nun, Com2'ye ait interruptu kullanmasì saºlanìyor
  106.   IntAdres = (IrqNo + 8) * 4
  107.   POKE IntAdres, PEEK(44)
  108.   POKE IntAdres + 1, PEEK(45)
  109.   POKE IntAdres + 2, PEEK(46)
  110.   POKE IntAdres + 3, PEEK(47)
  111.  
  112. '===========================================================================
  113. 'Bizim modemin IRQ'su için 8259'dan izin alìnìyor
  114.    RESTORE IRQSerbest
  115.    REDIM Oku(31)
  116.    DEF SEG = VARSEG(Oku(0))
  117.  
  118.     FOR PicMask = 0 TO 31
  119.        READ D%
  120.        IF PicMask = 7 THEN D% = IrqNo
  121.        POKE VARPTR(Oku(0)) + PicMask, D%
  122.     NEXT PicMask
  123.  
  124.    CALL ABSOLUTE(VARPTR(Oku(0)))
  125.  
  126. 'Modemin açìlmasì tamamlandì
  127. END SUB
  128.  
  129. SUB ModemiKapa (ModemAdresi)
  130.  
  131. '===========================================================================
  132. 'Modem kapatìlìyor
  133.  
  134.   PRINT #1, "ATH"
  135.   OUT ModemAdresi + 4, (INP(ModemAdresi + 4) AND 252)
  136.   CLOSE #1
  137.  
  138. '===========================================================================
  139. 'Eski deºerler iade ediliyor
  140.  
  141.   DEF SEG = 0
  142.   FOR I = 40 TO 63:             'ÿnterrupt adresleri
  143.     POKE I, Sakla(I - 40)
  144.   NEXT
  145.   OUT &H21, Sakla(24)           'PIC deºerleri
  146.   OUT &HA1, Sakla(25)
  147.   POKE 1026, Sakla(26)          'Com2 adresi
  148.   POKE 1027, Sakla(27)
  149.  
  150. END SUB
  151.  
  152. SUB Terminal
  153. COLOR 7, 1
  154. CLS
  155. LOCATE 1, 1, 1: PRINT "Modem ÿnstall ediliyor"
  156. PRINT #1, "ATZ"
  157. RR = FIX(TIMER)
  158. DO
  159.   IF LOC(1) > 0 THEN B$ = B$ + INPUT$(LOC(1), #1)
  160.   IF INSTR(B$, "OK") > 0 THEN EXIT DO
  161.   IF FIX(TIMER) - RR > 5 THEN
  162.      PRINT "Modem Port Adresi ve IRQ deºerleri hatalì !!"
  163.      RETURN
  164.   END IF
  165. LOOP
  166.  
  167. LOCATE 1, 1, 1: PRINT "Modem uygun bulundu, baƒladì (Çìk샠için Esc)"
  168. DO
  169.    A$ = INKEY$
  170.       IF A$ <> "" THEN
  171.           IF ASC(A$) = 27 THEN EXIT DO
  172.           PRINT #1, A$; :      'Modem girdisi
  173.       ELSE
  174.           IF LOC(1) > 0 THEN
  175.              B$ = INPUT$(LOC(1), #1): Gelen$ = Gelen$ + B$
  176.              Z = 0
  177.              IF INSTR(Gelen$, CHR$(0) + CHR$(72)) > 0 THEN Z = 1: PRINT "Yukarì Cursore basìldì"
  178.              IF INSTR(Gelen$, CHR$(0) + CHR$(80)) > 0 THEN Z = 1: PRINT "Aƒaºì Cursore basìldì"
  179.              IF INSTR(Gelen$, CHR$(0) + CHR$(75)) > 0 THEN Z = 1: PRINT "Sol Cursore basìldì"
  180.              IF INSTR(Gelen$, CHR$(0) + CHR$(77)) > 0 THEN Z = 1: PRINT "Saº Cursore basìldì"
  181.              IF Z = 1 THEN Gelen$ = ""
  182.              IF Z = 0 THEN PRINT #2, B$; : 'Diºer tuƒ
  183.           END IF
  184.       END IF
  185. LOOP
  186. END SUB
  187.  
  188.